package cn.gxufe.reliable.message.admin.utils;

import net.sf.cglib.beans.BeanCopier;

import java.util.HashMap;
import java.util.Map;

/**
 * BeanCopierUtils
 * @author yingjie.rong
 **/
public class BeanCopierUtils {

    private static Map<String, BeanCopier> cacheBeanCopier = new HashMap<>();

    public static void clone(Object source,Object target){
        String sourceName = source.getClass().getName();
        String targetName = target.getClass().getName();
        String cacheKey = sourceName+"_"+targetName;
        BeanCopier beanCopier = cacheBeanCopier.get(cacheKey);
        if(  beanCopier == null){
            synchronized (BeanCopierUtils.class){
                beanCopier = cacheBeanCopier.get(cacheKey);
                if(  beanCopier == null){
                    beanCopier = BeanCopier.create(source.getClass(), target.getClass(), false);
                    cacheBeanCopier.put(cacheKey, beanCopier);
                }
            }
        }
        beanCopier.copy( source,target,null);
    }

}
